package zsc.ruanc.practicaltraining.mapper;


import zsc.ruanc.practicaltraining.model.domain.TArticle;
import zsc.ruanc.practicaltraining.model.vo.TimeVo;
import zsc.ruanc.practicaltraining.model.vo.UpdateArticleVo;
import zsc.ruanc.practicaltraining.model.vo.getArticleVo;

import java.lang.annotation.Target;
import java.util.List;

public interface ArticleMapper {

    /**
     * 添加文章
     * @param article
     * @return
     */
    public int insert(TArticle article);

    /**
     * 删除文章
     * @param id 文章id
     * @return
     */
    public int delete(int id, Integer userId);



    /**
     * 获得一篇文章
     * @param id
     * @return
     */
    public TArticle getArticle(int id);

    /**
     * 分页 获取用户自己发布的所有文章或者已审核或未审核
     * 当一个用户获取另一个用户的所有文章时， 只能获取已审核的文章
     *
     * @param userId
     * @return
     */
    public List<getArticleVo> getArticleByUserId(int userId, Boolean flag);


    /**
     * 获取文章的数量
     * flag为null时，统计所有文章的数量
     * 为true时，统计已审核文章的数量
     * @param userId
     * @return
     */
    public int getCount(Integer userId, Boolean flag);

    /**
     * 分页查找
     * @param text
     * @return
     */
    public List<getArticleVo> selectPage(String text);

    /**
     * 修改文章
     * @param vo
     * @return
     */
    public int updateArticle(UpdateArticleVo vo);

    /**
     * 文章是否可评论 true为可评论
     * @param id
     * @param flag
     * @return
     */
    public int updateAllow(int id, boolean flag, int userId);

    /**
     * 查询文章是否通过审核
     * @param id
     * @return
     */
    public Boolean getArticleFlag(int id);

    /**
     * 获得文章标题
     * @param id
     * @return
     */
    public String getArticleTitle(int id);


    /**
     *  统一修改分类
     * @param oldName
     * @param newName
     * @return
     */
    public int updateCategories(String oldName, String newName);

    /**
     * 推荐列表
     *
     * @param num 要返回的条数
     * @param orderBy 按什么字段排序
     * @return
     */
    public List<getArticleVo> recommendList(int num, String orderBy);


    // 查看文章数量
    public int countArticle(int userId, Boolean flag);

    // 查看文章分类情况
    public String[] classificationList(int userId);

    // 查看文章情况 为文章自动审核
    public List<TArticle> checkVerify();

    // 按分类查找
    public List<getArticleVo> selectByCategories(String categories);


    //--------管理员权限-------------------------

    /**
     *  文章过审核
     * @param id
     * @param flag
     * @return
     */
    public int updateFlag(int id, boolean flag);

    /**
     * 查询所有文章
     * @param flag 为null时，查询所有文章 为true时，查询所有已审核文章 为false时，查询所有未审核文章
     * @return
     */
    public List<getArticleVo> selectAll(Boolean flag);

    // 批量审核
    public int batchFlag(List list);


    // 根据时间查询文章
    public List<getArticleVo> selectByTime(TimeVo vo);





}
